//#include <iostream>
//#include <stdlib.h>
//#include <algorithm>
//#include <unordered_map>
//#include <utility>
//#include <stdint.h>
//#include <typeinfo>
//#include <sstream>
//#include <direct.h>
//#include <stdio.h>
//#include "include/MQI_c_interface.h"
//#include "include/readData.hpp"
//
//
//using namespace std;
//
//int main(int argc,char *argv[])
//{
//    cout << "test mqi with 0 offset" << endl;
//
//    //Read and convert data
//    string graphPath = "D:\\��������\\instances\\test\\",
//        metisPath = "D:\\��������\\instances\\metis\\",
//        outputPaTh = "D:\\��������\\instances\\mqi\\";
//    string filename;
//    int times,order;
//    cerr << argc << endl;
//    if (argc == 4)
//    {
//        filename = argv[1];
//        order = atoi(argv[2]);
//        times = atoi(argv[3]);
//    }
//    else if (argc == 3)
//    {
//        filename = argv[1];
//        times = atoi(argv[2]);
//    }
//    else
//    {
//        filename = "sc-nasasrb";
//        filename = "M6";
//        order = 0;
//        times = 1;
//        cerr << "��������"<<endl;
//       // exit(-1);
//    }
//    srand(time(0));
//    graphPath += filename + ".graph";
//    metisPath += filename + "\\";
//    outputPaTh += filename;
//    _mkdir(outputPaTh.c_str());//�����ļ���
//    outputPaTh += "\\";
//    for (int run = order; run < times; ++run) {
//        string _metis = metisPath + filename + "_" + to_string(run) + "_metis.smat";
//        string _out = outputPaTh + filename + "_result_" + to_string(run) + ".smat";
//        int m = 0, n = 0;
//        int* ai = NULL, * aj = NULL;
//        double* a = NULL;
//        read_and_convert<int, int>(graphPath.c_str(), &m, &n, &ai, &aj, &a);
//
//        //Read seed
//        stringstream ss;
//        int nR = 0;
//        int* R = NULL;
//        read_seed<int, int>(_metis.c_str(), &nR, &R);
//        int* ret_set = new int[nR];
//
//       // free(a);
//        //Begin calling C function
//        cout << "calling C function" << endl;
//        int actual_length = MQI32(m, nR, ai, aj, 0, R, ret_set);
//        cout << "output set" << endl;
//        // for(int i = 0; i < actual_length; i ++){
//          //   cout << ret_set[i] << " ";
//         //}
//        cout<< "total number of vertices is " << actual_length << endl;
//
//        delete[]R;
//        delete[]ai;
//        delete[]aj;
//
//        ofstream outpartition(_out);
//        if (!outpartition) {
//            cout << "���ļ�ʧ�ܣ�" << endl;
//            exit(1);
//        }
//        //save
//        outpartition << actual_length << endl;//����ڵ���
//        for (int i = 0; i < actual_length; i++) {
//            outpartition << ret_set[i] << endl;
//        }
//        outpartition.close();
//        //free(a);
//        delete [] ret_set;
////        free(ret_set);
//    }
//    return EXIT_SUCCESS;
//
//
//}
